# -*- coding:utf-8 -*-
from django.db import models
import mptt
from django.utils.translation import ugettext as _
from django.conf import settings
from cms.models import CMSPlugin, Page
from tinymce import models as tinymce_models
from cms.models.fields import PlaceholderField
from django.contrib.auth.models import User
from django.core.urlresolvers import reverse
from imagekit.models import *
from imagekit.processors import Adjust, ResizeToFill, SmartCrop
from django.db.models import Q
from django.db.models.query import QuerySet

from south.modelsinspector import add_introspection_rules
add_introspection_rules([], ["^tinymce\.models\.HTMLField"])

class BaseCatalogModel(models.Model):
    title = models.CharField(u'название', max_length=255)
    active = models.BooleanField(u'отображать', default=True)
    description = tinymce_models.HTMLField(u'описание', blank=True, null=True)
    image = models.ImageField(u'изображение', blank=True, null=True, upload_to='catalog_img')
    
    thumbnail = ImageSpecField([Adjust(contrast=1.2, sharpness=1.1),
            ResizeToFill(50, 50)], image_field='image', format='JPEG',
            options={'quality': 90})

    smartcropped_thumbnail = ImageSpecField([Adjust(contrast=1.2,
            sharpness=1.1), SmartCrop(50, 50)], image_field='image',
            format='JPEG', options={'quality': 90})
    
    class Meta:
        abstract = True
        ordering = ['tree_id', 'lft']
    
    def __unicode__(self):
        return self.title
    
class Category(BaseCatalogModel):
    parent = models.ForeignKey('self', blank=True, null=True, verbose_name=u'родитель', related_name='child')
    
    def get_absolute_url(self):
        return reverse('category_view', args=[self.pk])

    class Meta:
        verbose_name = u'категория'
        verbose_name_plural = u'категории'

mptt.register(Category)

class Item(BaseCatalogModel):
    parent = models.ForeignKey(Category, blank=False, null=False, verbose_name=u'родитель', related_name='child_category')
    is_choise = models.BooleanField(u'наш выбор', default=False, help_text=u'Отображать приложение в блоке наш выбор')
    in_services = models.BooleanField(u'в сервисы', default=False, help_text=u'Отображать приложение в блоке "сервисы"')
    status = models.CharField(u'статус', blank=True, null=True, max_length=255)
    develop = models.CharField(u'создатель', blank=True, null=True, max_length=255)
    dev_link = models.URLField(u'ссылка на сайт разработчика', blank=True, null=True)
    os = models.ForeignKey('OperatinSystem', blank=True, null=True, verbose_name=u'Операционная система', related_name='child_operationsystem')
    size = models.FloatField(u'размер', blank=True, null=True)
    file = models.FileField(u'файл', blank=True, null=True, upload_to='catalog_app')
    link = models.FilePathField(u'ссылка на файл', blank=True, null=True)
    
    def get_absolute_url(self):
        return reverse('item_view', args=[self.pk])
    
    class Meta:
        verbose_name = u'программа'
        verbose_name_plural = u'программы'

class OperatinSystem(models.Model):
    title = models.CharField(u'название', max_length=255)
    
    def __unicode__(self):
        return u'%s' % self.title
    
    def get_categoryes(self):
        query = Item.objects.filter(os=self).query
        query.group_by = ["parent_id"]
        return QuerySet(query = query, model=Item)
    
    class Meta:
        verbose_name = u'операционная система'
        verbose_name_plural = u'операционные системы'